<!DOCTYPE HTML>
<html>
<head>
<title>#git bot interface</title>
<link rel="stylesheet" type="text/css" href="../style.css">
<link rel="shortcut icon" href="/git/bot/favicon.ico">
</head>
<body>
<h1>#git bot interface</h1>
<h2>Functions</h2>
<p>Here are your choices so far:

<ul>
	<li><a href="faq.php">List FAQ entries</a>
	<li><a href="trigger.php">List active triggers</a> (those things that
	look like !<em>foo</em>)
	<li><a href="voice.php">Get voiced on the channel</a> (to bypass the
	spam filter without a libera.chat account)
</ul>

<h2>Introduction</h2>
<p>The following features are available on IRC:
<ul class="long">
<li><strong>Triggers</strong>: inline commands in the form of !<em>foo</em>
(<a href="trigger.php">list</a>) spit out a previously defined text for
<em>foo</em>. It will be addressed to whoever you addressed with the line that
you used the trigger in. It can be used anywhere in the middle of a line,
though it should not run into other words.
	<ul><li><strong>Edit</strong>: If you are logged into NickServ, you
	can use ".trigger_edit &lt;trigger&gt; &lt;new expansion&gt;" to
	change the value of a trigger (no "!" there).
	<li><strong>Add new</strong>: Only available to selected people; same
	syntax as for editing. If you have been hanging out in #git for quite
	some time and haven't been selected yet, go shout at jast to make it
	happen.
	<li><strong>Aliases</strong>: to make one trigger an alias for
	another, set its contents to "@!othertrigger".
	<li><strong>Matching</strong>: if a request for !foo doesn't find an
	expansion named "foo", it will search for other names that
	<em>contain</em> "foo", and will spit out the shortest match instead.
	<li><strong>Private delivery</strong>: append "@p" to a trigger to
	have the response delivered to the person you are addressing, in a
	NOTICE.
	</ul>
<li><strong>Manpages</strong>: Say something like "man git-commit" to show a
link to one of git's manpages. Addressing works the same as for triggers.
<li><strong>FAQs</strong>: Say something like "faq non-bare" to link to an FAQ
from the git wiki. Valid keywords are the anchors used on the wiki page.
Addressing works the same as for triggers.
<li><strong>Draw graphs</strong>: the ".graph" and ".digraph" commands are
interfaces to <a href="/g/">Instagraph</a> (the syntax is
explained there).<br>
The main use case is visualizing scenarios people might come across in
everyday Git. For this we also have a small custom graphing language with the
<a href="gitgraph.php">.gitgraph command</a>.

<li><strong>Linking to things in the Git repo</strong>:<ul>
<li><code>git::master</code> (list of commits in branch)
<li><code>git::master^{commit}</code> or <code>git::master^c</code> (commit
view)<br>
  We try to auto-detect whether to show a list of commits or a single commit:
  if the argument looks like a commit ID, we show a single commit, otherwise
  it's the list. If a branch name was mistakenly detected as a commit ID, you
  can use something like <code>git::beef^{log}</code> or
  <code>git::beef^l</code> to force the list.
<li><code>git::master:Documentation/</code> (tree view, trailing slash)
<li><code>git::master:builtin/commit.c</code> (blob view)</ul>
<li><strong>Linking to things in other repos</strong>: <code>git[github
jast/gitinfo] master:gitinfo.pl</code> etc. Other supported hosting sites are
bitbucket, gitlab, repo[.or.cz] and notabug.
<li><strong>Random stuff</strong>: use the ".random" command to get a random
line of wisdom (well, a random line of text, at any rate) contributed by a
user.
	<ul><li><strong>Add</strong>: you can contribute lines if you are
	logged in. Simply use the command ".random add <em>Your line
	here</em>".
	<li><strong>Delete</strong>: the bot appends a line's ID when
	outputting the line. You can use the command ".random delete 5" to
	delete the line with ID 5. Note that only a select few can delete
	lines.
	</ul>
<li><strong>Git version</strong>: #git has the most recent version of git in
the topic. If you notice that it is out of date, use ".version" to
automatically find the most recent version and update the topic. It may take
up to 15 minutes after a release until it detects the new version.
<li><strong>Knowledge base</strong>: Use ".info <em>query</em>" to query a
general knowledge base that will try to match the query against many things,
including: Wikipedia, github, Sourceforge, calculator, Merriam-Webster,
TheFreeDictionary. Powered by <a href="//duckduckgo.com/">DuckDuckGo</a>'s
ZeroClick Info API.
<li><strong>Web search</strong>: Use ".search <em>query</em>" to get up to
three web search results. Powered by <a
href="//duckduckgo.com/">DuckDuckGo</a>.
<li><strong>Web login</strong>: use the ".weblogin" command to get a link for
activating extra features on the web page, such as editing and reverting
trigger texts.
</ul>

<p>Commands and triggers can be used both in-channel and privately (by using
/msg). By default, private messages will be responded to via NOTICE to you
personally... but if you do something like "/msg gitinfo someuser: !foo
to:#git", the response will be addressed to someuser in #git. The channel must
be specified because gitinfo hangs out (or supports hanging out) in multiple
channels.

<h2>Source code</h2>

<ul>
	<li><a href="//notabug.org/jast/gitinfo">Bot</a> (requires Perl,
	common::sense, DBD::SQLite, File::Slurp, JSON, POE::Component::IRC and
	friends)
	<li><a href="//notabug.org/jast/gitinfo-web">web interface</a> (requires
	PHP 5.x)
</ul>

<p>Both projects are published under the GPL v3. When contributing, please
sign off (using git commit -s) your commits to confirm:

<ol type="a">
<li>you have permission to license your changes under the GPL v3, and
<li>you do license your changes under the GPL v3.
</ol>

<p>Commits that are not signed off will not be accepted.

</body>
</html>
